package br.com.expositor.negocios.entidade;

import java.util.Collection;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Transient;

import br.com.expositor.negocios.infra.entidade.imp.Entidade;

@SuppressWarnings("serial")
@Entity
@SequenceGenerator(name = "SEQUENCE", sequenceName = "ITEM_MENU_SEQUENCE")
public class ItemMenu extends Entidade implements Comparable<Integer> {

	private String nome;

	private String descricao;

	private ItemMenu itemPai;

	private Integer ordem;

	private boolean link;

	private String acao;

	private Collection<ItemMenu> itensFilhos;

	public ItemMenu() {

	}

	@Override
	@Transient
	public int compareTo(Integer ordem) {
		int retorno = 0;
		if (ordem > this.getOrdem()) {
			retorno = -1;
		} else if (ordem < this.getOrdem()) {
			retorno = 1;
		}
		return retorno;
	}

	public String getAcao() {
		return this.acao;
	}

	@Basic
	@Column(length = 200)
	public String getDescricao() {
		return this.descricao;
	}

	@ManyToOne
	@JoinColumn(name = "item_pai_id")
	public ItemMenu getItemPai() {
		return this.itemPai;
	}

	@OneToMany(mappedBy = "itemPai")
	public Collection<ItemMenu> getItensFilhos() {
		return this.itensFilhos;
	}

	@Basic
	@Column(length = 100)
	public String getNome() {
		return this.nome;
	}

	@Basic
	public Integer getOrdem() {
		return this.ordem;
	}

	@Basic
	public boolean isLink() {
		return this.link;
	}

	@Basic
	@Column(length = 300)
	public void setAcao(String acao) {
		this.acao = acao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public void setItemPai(ItemMenu itemPai) {
		this.itemPai = itemPai;
	}

	public void setItensFilhos(Collection<ItemMenu> itensFilhos) {
		this.itensFilhos = itensFilhos;
	}

	public void setLink(boolean link) {
		this.link = link;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setOrdem(Integer ordem) {
		this.ordem = ordem;
	}
}
